package com.yssoft.controller.traceability;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.alibaba.fastjson.JSONObject;
import com.yssoft.controller.BaseController;
import com.yssoft.entity.traceability.TTraceProcess;
import com.yssoft.entity.traceability.TTraceQuota;
import com.yssoft.service.traceability.TraceProcessService;

/**
 * @类名称: TraceProcessController
 * @类描述: 溯源流程管理控制器
 * @作者: 洪丰
 * @创建时间:2018年5月23日 下午4:25:46
 */
@Controller
@RequestMapping(value = "/traceProcess")
public class TraceProcessController extends BaseController
{
	@Autowired
	private TraceProcessService traceProcessService;

	/**
	 * @方法名称: list
	 * @功能描述: 跳转到溯源流程列表页
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午4:39:51
	 * @param model
	 * @return String
	 */
	@RequestMapping(value = "/list")
	public String list(Model model){
		return "traceability/traceProcess/traceProcessList";
	}

	/**
	 * @方法名称: findTraceProcessPage
	 * @功能描述: 获取溯源流程列表页面
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午4:41:37
	 * @param page
	 * @param limit
	 * @param traceProcessName
	 * @return JSONObject
	 */
	@RequestMapping("/findPage")
    @ResponseBody
    public JSONObject findPage(@RequestParam(name = "page",defaultValue = "0") int page , @RequestParam(name = "limit",defaultValue = "10") int limit, String traceProcessName){
        JSONObject jsonObject = traceProcessService.queryPage(page, limit, traceProcessName);
        return jsonObject;
    }
	
	/**
	 * @方法名称: create
	 * @功能描述: 跳转到溯源过程新增页面
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午6:55:26
	 * @param model
	 * @return String
	 */
	@RequestMapping(value = "create", method = RequestMethod.GET)
	public String create(Model model) {
		model.addAttribute("action", "saveProcess");
		model.addAttribute("entity", new TTraceProcess());
		return "traceability/traceProcess/traceProcessForm";
	}
	
	/**
	 * @方法名称: saveProcess
	 * @功能描述: 保存溯源过程
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午6:56:55
	 * @param entity
	 * @param redirectAttributes
	 * @return String
	 */
	@RequestMapping(value = "saveProcess")
	public String saveProcess(TTraceProcess entity, RedirectAttributes redirectAttributes) {
		try {
			traceProcessService.addAcc(entity);
			redirectAttributes.addFlashAttribute("message", "保存成功!");
		} catch (Exception e) {
			e.printStackTrace();
			redirectAttributes.addFlashAttribute("message", "保存失败!");
		}
		return "redirect:list";
	}
	
	/**
	 * @方法名称: update
	 * @功能描述: 跳转到溯源过程更新页面
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午6:57:26
	 * @param id
	 * @param model
	 * @return String
	 */
	@RequestMapping(value = "update/{id}", method = RequestMethod.GET)
	public String update(@PathVariable("id") Integer id, Model model) {

		model.addAttribute("action", "update");
		model.addAttribute("entity", this.traceProcessService.queryProcessById(id));
		
		return "traceability/traceProcess/traceProcessForm";
	}
	
	
	/**
	 * @方法名称: update
	 * @功能描述: 修改溯源过程
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午7:03:15
	 * @param entity
	 * @param redirectAttributes
	 * @return String
	 */
	@RequestMapping(value = "update")
	public String update(TTraceProcess entity, RedirectAttributes redirectAttributes) {
		try {
			traceProcessService.editAcc(entity);
			redirectAttributes.addFlashAttribute("message", "保存成功!");
		} catch (Exception e) {
			e.printStackTrace();
			redirectAttributes.addFlashAttribute("message", "保存失败!");
		}
		return "redirect:list";
	}
	
	/**
	 * @方法名称: toQuotaView
	 * @功能描述: 跳转到溯源指标查看页面
	 * @作者: 洪丰
	 * @创建时间:2018年5月29日 下午2:22:31
	 * @param id
	 * @param model
	 * @return String
	 */
	@RequestMapping(value = "toQuotaView/{id}", method = RequestMethod.GET)
	public String toQuotaView(@PathVariable("id") Integer id, Model model) {
		TTraceProcess entity = this.traceProcessService.queryProcessById(id);
		List<TTraceQuota> qList = traceProcessService.findTraceQuotaList(entity.getId());
		entity.setTraceQuotaList(qList);
		model.addAttribute("entity", entity);
		return "traceability/traceProcess/traceQuotaView";
	}
	
	/**
	 * @方法名称: updateQuota
	 * @功能描述: 跳转到溯源指标更新页面
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午6:59:34
	 * @param id
	 * @param model
	 * @return String
	 */
	@RequestMapping(value = "updateQuota/{id}", method = RequestMethod.GET)
	public String updateQuota(@PathVariable("id") Integer id, Model model) {
		TTraceProcess entity = this.traceProcessService.queryProcessById(id);
		List<TTraceQuota> qList = traceProcessService.findTraceQuotaList(entity.getId());
		entity.setTraceQuotaList(qList);
		model.addAttribute("entity", entity);
		return "traceability/traceProcess/traceQuotaForm";
	}

	
	/**
	 * @方法名称: delete
	 * @功能描述: 删除溯源指标
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午7:18:58
	 * @param processIds
	 * @return String
	 */
	@RequestMapping(value = "delete", method = RequestMethod.POST)
	@ResponseBody
	public String delete(@RequestParam(value = "processIds") String processIds) {
		String [] processIdArray = processIds.split(",");
		String result = "1";
		for(String id : processIdArray){
			int resultInt = traceProcessService.delAccById(Integer.parseInt(id));
			if(resultInt <= 0){
				result = "0";
			}
		}
        return result;
	}
	
	/**
	 * @方法名称: deleteQuota
	 * @功能描述: 算出溯源过程
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午7:06:21
	 * @param quptaId
	 * @return String
	 */
	@RequestMapping(value = "deleteQuota", method = RequestMethod.POST)
	@ResponseBody
	public String deleteQuota(@RequestParam(value = "quptaId") String quptaId) {
		String result = "1";
		int resultInt = traceProcessService.delQuotaById(Integer.parseInt(quptaId));
		if(resultInt <= 0){
			result = "0";
		}
        return result;
	}
	
	/**
	 * @方法名称: updateQuota
	 * @功能描述: 修改溯源过程
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午7:07:38
	 * @param entity
	 * @param redirectAttributes
	 * @return String
	 */
	@RequestMapping(value = "updateQuota")
	public String updateQuota(TTraceProcess entity, RedirectAttributes redirectAttributes) {
		try {
			traceProcessService.editTraceQuota(entity);
			redirectAttributes.addFlashAttribute("message", "保存成功!");
		} catch (Exception e) {
			e.printStackTrace();
			redirectAttributes.addFlashAttribute("message", "保存失败!");
		}
		return "redirect:list";
	}
}
